home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 031a / zd86_10.zip / ZD86.DOC < prev    next >
Text File  |  1991-03-20  |  76KB  |  2,179 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.                                   ZanySoft Debugger
  31.  
  32.                                      Version 1.0
  33.  
  34.                                 by Christopher Kirmse
  35.  
  36.                                     March 20, 1991
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.           Enclosed, either on the disk or in an archive file you have
  75.           received, you should find the following files:
  76.  
  77.                     ZD86.COM            The ZanySoft debugger, unregistered
  78.                                         version.
  79.                     ZD86.NEW            List of changes since version 1.0
  80.                     ZD86.DOC            This documentation - includes
  81.                                         registration form.
  82.                     EXAMPLE.BAT         A batch file to use in the tutorial
  83.                                         along with REVERSE.*.
  84.                     REVERSE.ZDV         ZanySoft Debugger Variable Window
  85.                                         file for REVERSE.COM.
  86.                     REVERSE.ASM         Source code to REVERSE.COM
  87.                     REVERSE.Z86         ZanySoft symbol file for
  88.                                         REVERSE.COM.
  89.                     REVERSE.COM         A sample program to be used with
  90.                                         the tutorial.
  91.                     LST-Z86.EXE         A utility to convert .Lst files to
  92.                                         .Z86 ZanySoft symbol files.
  93.                     SYM-Z86.EXE         A utility to convert .Sym files to
  94.                                         .Z86 ZanySoft symbol files.
  95.  
  96.           Registered users will also find the following files, in the
  97.           subdirectory REGONLY:
  98.  
  99.                     ZD86REG.COM         The ZanySoft debugger, registered
  100.                                         version.
  101.                     MAP-Z86.EXE         A utility to convert .Map files to
  102.                                         .Z86 ZanySoft symbol files.
  103.                     LISTZ86.EXE         A utility to list all symbols in a
  104.                                         .Z86 ZanySoft symbol file.
  105.                     ZD86UPGR.EXE        A utility to copy all configuration
  106.                                         information from one copy of ZD86
  107.                                         to another.
  108.                     ZMACROS.EXE         A utility to list all the macros in
  109.                                         a copy of ZD86.
  110.  
  111.           Please remember, ZD86 is Shareware.  This means that I depend on
  112.           you to register ZD86 if you use it.  It also means that you are
  113.           free to copy all of the unregistered ZD86 package to anyone who
  114.           wants it--in fact, I encourage it!  After all, that is my only
  115.           means of distribution.  For more information, read section 1.2 of
  116.           this documentation.  A convenient registration form is included
  117.           on the very last page of the documentation, or just run ZD86 and
  118.           print out a registration form from there!
  119.  
  120.           To get in contact with my besides through the mail, you can call
  121.           over the modem at (703) 866-4452, 8-n-1.  At the main menu, type
  122.           "J ZanySft" without the quotes, and enter a message to Chris
  123.           Kirmse.  This is a quick way to give bug reports, ask about
  124.           upgrading, or just to see what's new at ZanySoft.
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.                                   Table of Contents
  140.  
  141.           1.0 ZD86 Overview . . . . . . . . . . . . . . . . . . . . . .   1
  142.                1.1 Features . . . . . . . . . . . . . . . . . . . . . .   1
  143.                1.2 Registration - Terms and Conditions  . . . . . . . .   3
  144.  
  145.           2.0 Quick Tour  . . . . . . . . . . . . . . . . . . . . . . .   4
  146.                2.1 ZD86 in a Nutshell . . . . . . . . . . . . . . . . .   4
  147.                2.2 Example  . . . . . . . . . . . . . . . . . . . . . .   6
  148.  
  149.           3.0 Detailed Description  . . . . . . . . . . . . . . . . . .   9
  150.                3.1 General Operation  . . . . . . . . . . . . . . . . .   9
  151.                     3.1.1 Debugging . . . . . . . . . . . . . . . . . .   9
  152.                     3.1.2 Navigation / Commands . . . . . . . . . . .    12
  153.                3.2 Windows  . . . . . . . . . . . . . . . . . . . . .    16
  154.                     3.2.1 Code Window . . . . . . . . . . . . . . . .    16
  155.                     3.2.2 Register Window . . . . . . . . . . . . . .    17
  156.                     3.2.3 Stack Window  . . . . . . . . . . . . . . .    18
  157.                     3.2.4 Dump Window . . . . . . . . . . . . . . . .    19
  158.                     3.2.5 Variable Window . . . . . . . . . . . . . .    20
  159.                     3.2.6 Output Window . . . . . . . . . . . . . . .    22
  160.                3.3 Configuring ZD86 . . . . . . . . . . . . . . . . .    23
  161.                3.4 Advanced Operation . . . . . . . . . . . . . . . .    25
  162.                     3.4.1 Macros  . . . . . . . . . . . . . . . . . .    25
  163.                     3.4.2 Graphics Debugging  . . . . . . . . . . . .    26
  164.  
  165.           4.0 Special Notes . . . . . . . . . . . . . . . . . . . . .    27
  166.                4.1 Disassembly, Moving Backwards  . . . . . . . . . .    27
  167.                4.2 Procedure Step Runaway . . . . . . . . . . . . . .    27
  168.                4.3 Status Line Help . . . . . . . . . . . . . . . . .    27
  169.                4.4 Symbolic Label Offsets . . . . . . . . . . . . . .    27
  170.                4.5 Symbols non-Case Sensitive . . . . . . . . . . . .    27
  171.  
  172.           5.0 Utilities . . . . . . . . . . . . . . . . . . . . . . .    29
  173.                5.1 Lst-Z86  . . . . . . . . . . . . . . . . . . . . .    29
  174.                5.2 Sym-Z86  . . . . . . . . . . . . . . . . . . . . .    29
  175.                5.3 Map-Z86  . . . . . . . . . . . . . . . . . . . . .    29
  176.                5.4 ListZ86  . . . . . . . . . . . . . . . . . . . . .    30
  177.                5.5 Zmacros  . . . . . . . . . . . . . . . . . . . . .    30
  178.                5.6 ZD86upgr . . . . . . . . . . . . . . . . . . . . .    30
  179.  
  180.           6.0 Registration Form . . . . . . . . . . . . . . . . . . .    31
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.           1.0 ZD86 Overview
  206.           -----------------
  207.  
  208.           1.1 Features
  209.           ------------
  210.  
  211.           ZD86 is a full featured, professional quality Assembler Debugging
  212.           Environment, which provides Symbolic Debugging for most common
  213.           Assemblers, including A86, MASM, TASM, etc.  The symbolic
  214.           debugging capability displays and highlights your statement
  215.           labels and variable names where you have placed them in your
  216.           code.  It is a powerful tool for the serious assembler developer
  217.           yet friendly enough for the PC enthusiast experimenting with
  218.           assembly language.
  219.  
  220.           ZD86 provides a full range of options for executing your program 
  221.           in a controlled environment.  These options include single and
  222.           procedure step, execute to breakpoint or statement and execute to
  223.           cursor location.  The environment provides for simultaneous
  224.           display windows of code, memory, preset variables (including
  225.           symbolic designation), stack, registers, and the user application
  226.           screen.  Windows can be closed, opened, moved, resized, and
  227.           displayed with different colors to provide better insight into
  228.           the code you are debugging or to meet your personal preferences. 
  229.           These and all other configurable settings can be tailored to your
  230.           needs and saved so that each time you invoke ZD86 your own unique
  231.           debugging environment will be at your service.
  232.  
  233.           All commands are available in menu driven form (Menu Mode) and
  234.           with intuitive quick-key combinations (Command Mode) to increase
  235.           productivity as you become more experienced with the environment. 
  236.           ZD86 comes with Macro Define capability and configurable Function
  237.           Keys to further increase ease of use and productivity.
  238.  
  239.           As you are debugging your program you  control the register,
  240.           stack, and memory values.  You can change these values by using
  241.           the convenient editing feature which displays both ASCII and hex. 
  242.           Other helpful features include program preset from within the
  243.           ZD86 environment, quick statement NOPing, support of EGA/VGA
  244.           43/50 line mode, situation dependent on-screen help line, and the
  245.           capability to print a range of your code to disk or printer.
  246.  
  247.           Utilities are included to create the symbol file required for the
  248.           symbolic capability from an A86 .Sym file, a MASM .Lst file, TASM
  249.           .Lst file, or a Link/Tlink .Map file (.Map file conversion is not
  250.           included in the evaluation version but is supplied with the
  251.           registered version of ZD86).
  252.  
  253.           Debugging is a tough job--make sure you have the right tool to
  254.           handle it--ZD86.  And if you use the tool, register it.
  255.  
  256.  
  257.  
  258.                                         - 1 -
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.           1.2 Registration - Terms and Conditions
  272.           ---------------------------------------
  273.  
  274.           A convenient registration form is available as a menu selection. 
  275.           Simply select it from the Menu - Help selection, Register Form,
  276.           and hit Print-Screen on your PC to get a hard copy.  Also, a form
  277.           is included at the end of this document.
  278.  
  279.           ZD86 is provided for your individual use, and you are responsible
  280.           for determining the fitness and usability of the package.  You
  281.           may not resell or modify this package.  You may however, make
  282.           backup copies for yourself and you may make copies to distribute
  283.           to others for their evaluation and possible registration.  You
  284.           may charge others a small fee for such redistribution.  You and
  285.           any others to whom you distribute copies may execute ZD86 solely
  286.           for the purpose of evaluation.  If you continue to use the
  287.           software you must register it.  I will not be liable for any
  288.           damages whatsoever arising from evaluation or use of this
  289.           software, whether registered or unregistered, including but not
  290.           limited to failure of the software to perform as expected.
  291.  
  292.           Registering the current version of ZD86 now will also entitle you
  293.           to all future releases upon payment of a small update fee.
  294.  
  295.           Educational Institutions, Companies, or Government Agencies
  296.           should contact me directly for volume purchases or site license
  297.           fees.
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.                                         - 2 -
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.           2.0 Quick Tour
  338.           --------------
  339.  
  340.           2.1 ZD86 in a Nutshell
  341.           ----------------------
  342.  
  343.           When you first enter ZD86 the screen will be displayed according
  344.           to the default configuration settings.  These configuration
  345.           settings control the placement and size of the windows, display
  346.           colors, the actions to be taken by all function key combinations,
  347.           25 vs. 43/50 line mode, etc.  Alt-X will let you quit ZD86 at
  348.           virtually anytime.
  349.  
  350.           On the bottom line of the screen you will notice the status/help
  351.           line.  In this area is shown an abbreviated context sensitive
  352.           help list of many of the keys that can be pressed and their
  353.           effect.  You can scroll through the choices or hit the
  354.           highlighted letter of the command desired.  Many menus have
  355.           additional pull-downs to provide additional choices or to get
  356.           more information.  Selections not available (because of other
  357.           options already chosen or other conditions) appear in subdued
  358.           color.  Escape will also bring you back up from the deepest of
  359.           menus.  You can also use quick-key combinations to get to a Menu
  360.           selection.  Press Alt and the first letter of the menu selection,
  361.           e.g., Alt-C takes you to Menu Mode and selects the Code option.
  362.  
  363.           Pressing any key removes the title display and you are now ready
  364.           for operation.  There are two basic modes of operation, Menu Mode
  365.           and Command Mode.  Press Esc or M to go from Command Mode to Menu
  366.           Mode and back.  In Menu Mode the Menu Bar is activated and you
  367.           can use the arrow keys to move to the selection of your choice. 
  368.           When you are in Menu Mode the currently active menu selection is
  369.           highlighted.  Enter will select your choice and display a pull
  370.           down menu.
  371.  
  372.           Command Mode is the normal operation mode wherein you run your
  373.           program, move around the window displays and edit memory
  374.           locations.  S is the single step command, P is procedure step, B
  375.           sets a breakpoint at the Code Window cursor, etc.  Other commands
  376.           work on the current window:  C closes it, R allows you to move
  377.           the current window with the arrow keys, or to change its size by
  378.           holding down Ctrl while using the arrow keys.  Note that closing
  379.           a window does not affect the contents, and you can reopen it at
  380.           any time.  It will return to its last position and size.
  381.  
  382.           Looking at the screen you see that the status/help line now shows
  383.           keys that can be used in the Code Window which is in the top left
  384.           of the screen.  Scanning the screen you can see all of the other
  385.           windows displayed.  Each window has its own cursor.  If you ran
  386.           ZD86 with a program name on the command line (if not, hit Alt-F,
  387.           L and type REVERSE ABC then enter).  You will see the code
  388.           address, hex machine code and the assembler language statements
  389.  
  390.                                         - 3 -
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.           for that program.  The border of the Code Window is highlighted
  404.           meaning it is the current window.  You can move the display, edit
  405.           values, or change the location and size of whichever window is
  406.           current.  Hit tab to make a different window current (Ctrl and
  407.           the first letter of the window, e.g. Ctrl-R, also changes the
  408.           current window, in this case to the Register Window).
  409.  
  410.           The best way to understand ZD86's capabilities is to use it. 
  411.           Make sure you have a backup copy (to get back the default
  412.           configuration settings for colors, etc.) and try the various
  413.           capabilities.  Note especially the configuration options under
  414.           the Install Menu selection.  Go down through the menus until you
  415.           see the color display appear and experiment by choosing different
  416.           combinations with the arrow keys.
  417.  
  418.           While in Command Mode, hit W and watch the program execute in
  419.           walk through mode (until you press another key).  Watch the
  420.           registers, flags, and Variable Window display changing values,
  421.           while the Code Window shows the program flow.  If you are
  422.           executing Reverse, after a short period of time you will notice
  423.           changes in the Output Window also.  After you have experimented
  424.           with the ZD86 environment, follow the example in the next section
  425.           to get an idea of how this environment can help you debug in a
  426.           specific situation.
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.                                         - 4 -
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.           2.2 Example
  470.           -----------
  471.  
  472.           The example is designed to illustrate the power of ZD86 and to
  473.           introduce many of the debugging concepts.  To begin the example
  474.           start ZD86 by typing EXAMPLE at the DOS prompt which will
  475.           initiate the ZD86 debugger and load in the program REVERSE.COM. 
  476.           The REVERSE program is a small assembler program which takes a
  477.           character string on its command line and prints it to the screen
  478.           in reverse order.  Hit any key to clear the title screen.
  479.  
  480.           You will notice that the Code Window displays a program with
  481.           several Symbolic Labels.  This means that there already is a
  482.           symbol file named Reverse.Z86 which was automatically loaded. 
  483.           (To create a Symbol File from one of your own programs see the
  484.           Utilities Section.)
  485.  
  486.           The Variable Window also has several items already defined.  With
  487.           the exception of the Symbolic name Reverse_line and its
  488.           continuation, those items are the standard variable window
  489.           defaults.  The pre-defined Symbolic name Reverse_line indicates
  490.           that settings for the Variable Window have been saved in a file
  491.           with the name Reverse.ZDV because it was autoloaded.  You can
  492.           modify the settings for the Variable Window as well as have
  493.           multiple setting files; see the section on Configuring ZD86 for
  494.           details.
  495.  
  496.           The Output Window shows a portion of the screen where you typed
  497.           your last instructions in DOS.  EXAMPLE was actually a .BAT file
  498.           which issued the following command:
  499.           ZD86 Reverse This is a test line.  abcdefghijklmnopqrstuvwxyz .
  500.           Tab to make the Output Window current and use the arrow keys to
  501.           see the whole line that came from the .BAT file.
  502.  
  503.           Note the instruction under the cursor is JMP Past_data.  Hit
  504.           up-arrow and note that the Command and label Main have
  505.           disappeared.  This is because disassembly backwards through
  506.           memory is not always accurate (See the Section in Special Notes). 
  507.           Hit Ctrl-down-arrow, which causes the disassembly to shift by one
  508.           byte, to see that we have the correct code once again.  Note in
  509.           the Register Window that the Instruction Pointer (CS:IP) is at
  510.           xxxx:0100, the statement that has the Symbolic Label Main.  xxxx
  511.           indicates that the segment portion of the address may vary from
  512.           run to run and from machine to machine.  To prove this select
  513.           Menu - Code selection, Toggle Symbols (either by hitting Esc to
  514.           enter the menu mode and using the arrow keys or by hitting Alt-C,
  515.           T)--toggle again to restore the Symbolic Names.  Return to
  516.           Command Mode by hitting Escape.
  517.  
  518.           Press S to begin Single Step execution of the Reverse program. 
  519.           Note that the Code Window indicates you are now at the Past_data
  520.           location and CS:IP is xxxx:0127.  Press S again and note that the
  521.  
  522.                                         - 5 -
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.           CL register, the lower byte of CX, has been updated with the
  536.           length of the Command Line string (hex 31 = decimal 49--note the
  537.           Variable Window of 49 at DS:0080 from the Command Line).  Press S
  538.           several more times until you execute the statement
  539.           MOV DI,Reverse_line.  The register DI  has been updated to 017C. 
  540.           Make sure that the Code Window is current (outline is double
  541.           width, highlighted);  if not, hit Tab until it is the current
  542.           window.  Move down the Code Window with the arrow keys and note
  543.           that the label Reverse_line is at 017C.  Move the cursor back up
  544.           to xxxx:0135.
  545.  
  546.           If you are in 25 line mode expand the variable window by hitting
  547.           Tab multiple times to make it current, press R, depress the
  548.           Up-arrow key several times, followed by Ctrl-down-arrow several
  549.           times, then ENTER.
  550.  
  551.           Press S several times; watch the different windows as
  552.           xxxx:0135 REP MOVSB is executed repeatedly.  The CX register
  553.           decrements for each press; DS:SI and ES:DI increment.  The
  554.           Variable Window shows DS:SI being processed and DS:Reverse_line
  555.           receiving each character being moved.  Press S several times
  556.           after the new characters added to DS:Reverse_line are no longer
  557.           visible.  Select Data, Variable Edit from the Menu (Escape, D, V,
  558.           or Alt-D, V).  Select Down Var Cursor or Up Var Cursor as
  559.           necessary and hit Enter as necessary to move the Cursor in the
  560.           Variable Window to the line after DS:Reverse_line.  Then select
  561.           Continue prev and hit Enter.  Note the line has now become a
  562.           continuation line for DS:Reverse_line and you can now see the
  563.           other characters that were moved.  Select Down Var Cursor and
  564.           Continue Prev several more times to make additional continuation
  565.           lines.  Return to Command Mode (Esc repeatedly until you are out
  566.           of Menu Mode) and press S several times to see additional
  567.           characters move one by one.
  568.  
  569.           Press P one time.  P executes Procedure Step which will execute a
  570.           subroutine REP or Loop until done (as opposed to one by one with
  571.           S).  Note the remainder of the text from the Command Line has
  572.           been moved to Reverse_line.  Tab to the Variable Window to make
  573.           it current.  Press right-arrow several times; note this makes the
  574.           entire label name Reverse_line visible and that the continuation
  575.           lines automatically adjust so that they continue to display the
  576.           full text.  Press R and Ctrl-right-arrow to expand the Variable
  577.           Window to the right edge of the screen and press Enter.  Note
  578.           that the full text is now visible on one line.
  579.  
  580.           Press S several times until you come to the statement
  581.           Print_line_reversed:  PUSH AX.  Watch the stack window update as
  582.           you press S once for each PUSH statement.  Press S several more
  583.           times until you reach xxxx:015C  TEST CX,CX.  Watch the bottom of
  584.           the Register Window as you press S once again and note how the
  585.           flags are updated.  Press S several times until you reach
  586.           xxxx:0166  MOV b[DI],AL.  Watch DS:Reverse_line in the Variable
  587.  
  588.                                         - 6 -
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.           Window as you press S again and you will see Z appear as the text
  602.           from the command line is moved in reverse order.  Keep pressing S
  603.           to walk through the loop and see the characters appear one by one
  604.           in reverse order.  After you have seen enough press S until you
  605.           reach xxxx:0169  LOOP Do_reverse_line and hit P.  This will
  606.           complete the loop and move the remaining text in reverse order
  607.           into DS:Reverse_line.
  608.  
  609.           Press S several times until the statement at xxxx:0175.  Press S
  610.           one more time which executes INT 21h, which performs the DOS
  611.           service to print the reversed string on the screen.  Press Ctrl-O
  612.           to make the Output Window current and move around it with the
  613.           arrow keys until you see the reversed string.  Press V to view
  614.           the Output Application Screen and you will also see the reversed
  615.           string.  Press any key to return to the ZD86 Debugging
  616.           Environment.
  617.  
  618.           As you press S watch the values move from the stack to the
  619.           appropriate registers.  Press S until you RETurn to the statement
  620.           Exit: INT 20h.  Press S again and note the Program Terminated
  621.           Message Box.  The program is successfully completed.
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.                                         - 7 -
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.           3.0 Detailed Description
  668.           ------------------------
  669.  
  670.           3.1 General Operation
  671.           ---------------------
  672.  
  673.           3.1.1 Debugging
  674.           ---------------
  675.  
  676.           Debugging features fall into three principal areas:  Execution
  677.           Control, Memory Operations, and General Operations.
  678.  
  679.           Controlling execution is one of the most important functions of a
  680.           debugger and ZD86 has a full range of options.  There are four
  681.           execution modes: Single Step, Procedure Step, Walkthrough, and
  682.           Go.  Single Step causes execution of the program line pointed to
  683.           by CS:IP (the line indicated by the triangle in the Code Window). 
  684.           Procedure Step has the same effect on single execution
  685.           statements.  On repeats, loops, and calls, Procedure Step
  686.           executes the required number of times (or the entire procedure)
  687.           and stops at the next statement.  Walkthrough executes Procedure
  688.           Step after Procedure Step until a key is pressed, it reaches a
  689.           breakpoint, or it reaches the end of the program.  S, P, and W
  690.           invoke the above execution modes respectively; these execution
  691.           modes can also be selected from the Menu.  The final execution
  692.           mode, Go, has several options.  Go from the Menu or G from
  693.           Command Mode will run until the end of the program or until it
  694.           encounters a breakpoint.  Breakpoints can be set from Command
  695.           Mode by pressing B.  This causes a breakpoint to be set at the
  696.           current cursor position in the Code Window.  If a breakpoint is
  697.           already set at the cursor location pressing B causes the
  698.           breakpoint to be cleared.  Toggle Breakpoint in the Menu - Code
  699.           selection has the same effect.  Breakpoints may also be set at a
  700.           specific address from the Menu by selecting Breakpoint
  701.           @xxxx:xxxx.  A list of currently set Breakpoints can be obtained
  702.           by choosing Menu - Code selection, List Breakpoints.  Two
  703.           additional Go options are available from the Menu:  Go until
  704.           Cursor which causes execution from the current CS:IP until the
  705.           statement highlighted by the cursor and Go until Address causes
  706.           execution from the current CS:IP until the address specified. 
  707.           Breakpoints take precedence over both Go until options and will
  708.           cause execution to halt if encountered prior to the cursor or
  709.           address specified.
  710.  
  711.           Sometimes during execution of your program, in particular when
  712.           using the Go option, you may get caught in an infinite loop or
  713.           runaway that prevents your return to the ZD86 Debugging
  714.           Environment.  The safest way to return is to press Ctrl-break to
  715.           stop the execution of your program and return to the ZD86
  716.           Debugging Environment.  This stops your program after the next
  717.           execution of INT 21h in your program.  You can press SysReq (or
  718.           Alt-SysReq depending on your keyboard) to stop execution of your
  719.  
  720.                                         - 8 -
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.           program as well.  If your program code was executing you will
  734.           immediately return;  if you were in an interrupt routine, you
  735.           will need to step through the interrupt in order to return.  This
  736.           is not always successful--you may need to reboot and reload your
  737.           program in ZD86.
  738.  
  739.           Memory Operations consist of displaying areas you need to see and
  740.           modifying the contents of memory locations.  Many of these
  741.           options are executed from the Menu - Data selection.  Dump at
  742.           DS:SI and Dump at ES:DI are handy ways to set the Dump Window
  743.           display area to these often used addresses.  Display At address
  744.           (@ from Command Mode) allows you to change the display starting
  745.           location of the Code, Stack, or Dump Windows to the address
  746.           specified; the Code, Stack or Dump Window must be the current
  747.           window as appropriate.  Edit from the Menu - Data or Enter while
  748.           in Command Mode allows you to alter the contents of memory in the
  749.           current window at the current cursor location.  A special edit
  750.           window appears showing memory contents in both ASCII and hex. 
  751.           The flashing cursor indicates whether you are editing in ASCII or
  752.           hex; TAB switches between the options.  You may save the changes
  753.           by pressing Enter or discard them by pressing Esc [no, the menu
  754.           deal].  Fill from the Menu - Data selection allows you to put a
  755.           single hex byte in an entire memory range, such as to quickly
  756.           blank out an area.  Symbol Value will return the memory address
  757.           for any symbolic name.  Toggle Symbols from the Menu - Code
  758.           selection allows you to switch the Code Window display back and
  759.           forth between Symbolic and Address display.
  760.  
  761.           General Operations refers to several specialized features of the
  762.           ZD86 Debugging Environment.  These features are generally found
  763.           under the Menu - Code selection.  Move cursor to CS:IP is a quick
  764.           way to restore the Code Window display to the next executable
  765.           code statement after you have scrolled through other areas of
  766.           your code, or if you have directly changed the CS:IP value in the
  767.           register window.
  768.  
  769.           Set CS:IP to cursor is a convenient means of skipping an area of
  770.           code or causing execution of a specific subroutine that you have
  771.           scrolled to in the Code Window.  Simply find the area you wish to
  772.           execute; Set CS:IP to Cursor will cause that statement to become
  773.           the next executable statement.
  774.  
  775.           NOPing a statement is another convenient means during debugging
  776.           of preventing certain code from executing.  Simply convert the
  777.           statement(s) to a NOP, either from the Menu - Code selection, NOP
  778.           statement, or by pressing N in Command Mode.  Executing this
  779.           command or selecting the Menu option NOP statement causes the
  780.           statement at the cursor location in the Code Window to be filled
  781.           with NOPs and moves the cursor to the next statement.  Holding
  782.           down N in Command Mode therefore repeats causing very quick
  783.           deletion of many statements.
  784.  
  785.  
  786.                                         - 9 -
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.           Restore Registers is a handy "Undo" if you make an error while
  800.           modifying register values in the Register Window.  This command
  801.           will restore all registers to the value they had after the last
  802.           executable statement, i.e., before any modifications were made.
  803.  
  804.           Finally, Screen Swap from the Menu - Window selection has three
  805.           options: Always, Never, and Smart which require some explanation. 
  806.           Setting this option controls automatic switching by ZD86 between
  807.           the User Application Screen and the ZD86 Debugging Environment. 
  808.           In the Always setting the User Application Screen will be shown
  809.           during the execution of each statement, even if no Input/Output
  810.           operation is occurring in that statement.  This can cause an
  811.           annoying flicker because of the constant switching between the
  812.           ZD86 Debugging Environment and the User Application Screen.  The
  813.           Never setting eliminates the flicker by keeping the display as
  814.           the ZD86 Debugging Environment.  If there are Input/Output
  815.           operations you can monitor them in the Output Window.  If the
  816.           program is awaiting input the left side of the status/help line
  817.           (bottom line of the screen) will indicate "Running".  The third
  818.           setting, Smart, is a compromise of the above two settings.  While
  819.           Single Stepping it will only go to the User Application Screen on
  820.           an Input/Output operation.  While Procedure Stepping it will go
  821.           to the User Application Screen on an Input/Output operation or
  822.           for any loop or procedure call, since these might contain an
  823.           embedded Input/Output operation.  Note that for debugging the VGA
  824.           13h graphics mode (by giving ZD86 the switch /vga13h on the
  825.           command line), you must have the Screen Swap setting set to
  826.           Always for correct results. (see Section 3.4.2 - Graphics
  827.           Debugging)
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.                                         - 10 -
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.           3.1.2 Navigation / Commands
  866.           ---------------------------
  867.  
  868.           Moving around in the ZD86 Debugging Environment is
  869.           straightforward.  There are two basic operation modes, Menu Mode
  870.           and Command Mode.  To move between the modes press Esc.
  871.  
  872.           In Menu Mode the current Menu selection is highlighted in the
  873.           Menu bar at the top of the screen.  The left and right arrow keys
  874.           move you across the Menu bar; Enter or down arrow pulls down the
  875.           first level Menu list.  Use the up and down arrows to move within
  876.           the list; ENTER to select your choice from the list.  If your
  877.           choice has additional options or needs additional information an
  878.           additional list will appear.  Many menu lists will close once you
  879.           have selected your choice.  Some menu lists where you are likely
  880.           to want to make repeated selections remain open until you
  881.           explicitly leave them.  Repeatedly hit Esc to come up from a menu
  882.           list until you have left Menu Mode.
  883.  
  884.           In Command Mode you can move between and within the windows as
  885.           well as issue many commands directly using quick-key
  886.           combinations.  The six windows available (simultaneously) are
  887.           Code, Register, Stack, Output, Dump, and Variable.  All windows
  888.           are updated simultaneously as you execute your program or change
  889.           the environment.  One window, called the "current" window, is
  890.           indicated by the double width highlighted border.  You can change
  891.           which window is current by hitting Tab or Shift-Tab to cycle
  892.           through the windows, or by pressing Control and the first letter
  893.           of the window (Ctrl-S for the Stack window, Ctrl-C for the Code
  894.           window, etc.).  You can move around and edit contents of the
  895.           window which is current.
  896.  
  897.           Moving within the current window is controlled by eight keys; the
  898.           four arrow keys, Page Up, Page Down, Home, and End.  The arrow
  899.           keys generally are used to move the cursor in the direction
  900.           indicated.  Page Up and Page Down move the entire display within
  901.           the window so that the previous contents move off the screen and
  902.           the window will now display the contents immediately below or
  903.           above the previous contents, respectively.  Home moves the cursor
  904.           to the beginning of the current line; End move the cursor to the
  905.           end of the current line.  In the Code and Variable Windows the
  906.           left and right arrow keys and Home and End keys shift a portion
  907.           of the display to the right or left to allow you to see long
  908.           symbol names.
  909.  
  910.           You have complete control over the size and placement on the
  911.           screen of the six debugging windows.  While in Command Mode press
  912.           R to resize the current window, move it around the screen with
  913.           the arrow keys, and change its size by pressing the Ctrl-arrow
  914.           keys.  You can also close or open the windows as you see fit.
  915.  
  916.           Several of the Windows have special functions which are activated
  917.  
  918.                                         - 11 -
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.           by pressing Ctrl and one of the arrow keys.  In the Code Window
  932.           Ctrl-up-arrow and Ctrl-down-arrow adjust the disassembly one
  933.           byte.  This is helpful if the disassembly becomes confused when
  934.           "backing up" through the code (See Section 4.1 in Special Notes
  935.           regarding disassembly).  In the Register Window Ctrl-up-arrow
  936.           increments the register whose value is highlighted by the cursor,
  937.           and Ctrl-down-arrow decrements it.  In the Dump Window
  938.           Ctrl-left-arrow or Ctrl-right-arrow causes the display to shift
  939.           around the cursor (as opposed to moving the cursor through the
  940.           display), allowing you to line up the leftmost display position
  941.           at a meaningful byte boundary.
  942.  
  943.           Within any window the Enter key causes a Memory Edit Box to
  944.           appear allowing you to change memory or registers at the current
  945.           cursor position.  Movement within the Memory Edit Box uses the
  946.           four arrow keys, Page-up, Page-down, Home and End exactly as
  947.           described above for the display windows.
  948.  
  949.           There are several ways to issue commands.  In Command Mode many
  950.           of the more common commands can be accessed by pressing a single
  951.           letter key.  Other commands can be configured to be activated by
  952.           a single Function Key or Function Key combination (Shift, Alt, or
  953.           Ctrl Function Key).  See the Configuration Section below. 
  954.           Finally, all commands can be executed by going to the Menu Mode
  955.           and making appropriate choices from the menu lists.  Menu
  956.           selections can be accessed by hitting Esc to get to Menu Mode and
  957.           then using the arrow keys to move the selection desired, or you
  958.           can go directly to the Menu bar selection by typing Alt and the
  959.           first letter of the selection.  For example, Alt-C from Command
  960.           Mode puts you into Menu Mode with the Code list activated and
  961.           displayed.  The ultimate shortcut for a series of commands that
  962.           you use frequently is, of course, recording them as a macro.
  963.  
  964.           Simply hit Alt-M to start recording, select a number for the
  965.           macro, and type in the key sequence.  Hit Alt-M again to turn
  966.           macro recording off.  Now type Alt and the number you chose for
  967.           the macro and the entire key sequence will be executed.
  968.  
  969.           The commands available from Command Mode are as follows:
  970.  
  971.                B - Toggles a breakpoint on/off at the current cursor
  972.                    location in the Code Window.
  973.                C - Close the current window (removes it from the screen).
  974.                E - Edit the memory contents at the position indicated by
  975.                    the cursor in the Variable Window.
  976.                G - Causes execution of the program being debugged starting
  977.                    at the current value of CS:IP and continuing to a
  978.                    breakpoint or the end of the program.
  979.                H - Display Help Screen.
  980.                M - Menu Mode
  981.                N - NOP statement at the cursor position in the Code Window.
  982.                O - Opens a window; the list of closed windows will pop-up
  983.  
  984.                                         - 12 -
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.                    for you to select from.
  998.                P - Procedure Step from the current value of CS:IP
  999.                R - Resize the current Window.  Use the arrow keys to move
  1000.                    the window around on the screen.  Use Ctrl-arrow keys to
  1001.                    change the size of the Window.
  1002.                S - Single Step from the current value of CS:IP.
  1003.                V - View the User Application Screen instead of the ZD86
  1004.                    Debugging Environment.  Press any key to return to the
  1005.                    debugger display.
  1006.                W - Walk through mode, which is an automated Procedure Step
  1007.                    until a key is pressed.  Gives a good view of program
  1008.                    flow.  All windows are updated so you can see registers
  1009.                          and memory change.
  1010.                Y - Enter a symbol name and get the offset location, or
  1011.                    constant value of the symbol.
  1012.                @ - In the Code, Dump, or Stack window, enter an address and
  1013.                    the display in the window will now begin at that
  1014.                    address.
  1015.  
  1016.           The above commands are also available via selections from the
  1017.           Menus.  Additional commands available only from Menu Mode (unless
  1018.           you configure them as Function key combinations) are as follows:
  1019.  
  1020.                Program Reset - Reloads the current program from disk and
  1021.                    resets CS:IP.
  1022.                Load Program - Brings a new .Exe or .Com file into the ZD86
  1023.                    Debugging Environment.
  1024.                Save and Load Var file - Saves (retrieves) the settings for
  1025.                    display in the Variable Window.
  1026.                Save .COM file - Allows you to save a .COM file you have
  1027.                    modified to disk.
  1028.                Write listing - Writes disassembled code between addresses
  1029.                    specified to disk or device.
  1030.                25 vs. 43/50 line mode - Changes display if you have EGA/VGA
  1031.                Screen Swap - Controls switching to the User Application
  1032.                    Screen.
  1033.                Go Until Cursor - Causes program execution to the statement
  1034.                    indicated by the cursor in the Code Window.
  1035.                Go Until xxxx:xxxx - Causes program execution to the address
  1036.                    indicated.
  1037.                Move Cursor to CS:IP - Change the Code Window display so
  1038.                    that the cursor appears at the address CS:IP.
  1039.                Set CS:IP to Cursor - Change the CS:IP register pair to hold
  1040.                    the address of the statement shown in the Code Window at
  1041.                    the cursor.
  1042.                Toggle Symbols - Turn the display of symbol names on/off.
  1043.                List Breakpoints - List addresses of all currently set
  1044.                    breakpoints.
  1045.                Clear All Breakpoints - Deletes all previously set
  1046.                    breakpoints.
  1047.                Restore Registers - Reset all registers to the value they
  1048.                    had prior to the last program execution.
  1049.  
  1050.                                         - 13 -
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.                Dump at DS:SI - Change the dump window display to begin at
  1064.                    address DS:SI.
  1065.                Dump at ES:DI - Change the dump window display to begin at
  1066.                    address ES:DI.
  1067.                Edit @xxxx:xxxx - Allows editing of the memory at the
  1068.                    address specified.
  1069.                Variable Edit - Allows selection of display items and
  1070.                    formats for the variable window.
  1071.                Install - Color Configure, Function key Configure, Other
  1072.                    Configure - Allows you to change and save various
  1073.                    configurable items.
  1074.  
  1075.           The last two areas, Variable Edit and Install - Color Configure,
  1076.           Function key Configure, Other Configure are part of the
  1077.           configurable debugging environment and are covered in more detail
  1078.           in section 3.3.
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.                                         - 14 -
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.           3.2 Windows
  1130.           -----------
  1131.  
  1132.           3.2.1 Code Window
  1133.           -----------------
  1134.  
  1135.           The Code Window displays your disassembled assembly language
  1136.           code.  If you have created a symbol file (see Section V,
  1137.           Utilities) your label names will appear highlighted at the
  1138.           appropriate line in the code, and variable names and labels will
  1139.           appear where they have been used in the assembly statements.  The
  1140.           Code Window can be moved to any location on the screen, or
  1141.           removed altogether.  The Code Window may be shrunk or expanded to
  1142.           display as many lines of code as you like up to the size of the
  1143.           screen display.
  1144.  
  1145.           Moving within the window is controlled by the arrow keys.  Moving
  1146.           beyond the upper or lower window boundaries, or using
  1147.           Page-Up/Page-Down, causes the code to scroll within the window. 
  1148.           The location of the next statement to be executed (the CS:IP
  1149.           address) is indicated by a triangle on the left side of the
  1150.           machine code.  When you are stepping through your program the
  1151.           display in the Code Window will scroll or change as necessary to
  1152.           display the currently executing statements.
  1153.  
  1154.           While in the Code Window you can examine your code, move the
  1155.           cursor, toggle breakpoints on/off, or move the cursor to a
  1156.           position in the code and choose Menu - Code selection, Go until
  1157.           cursor.  When you page-up or scroll off the top of the screen,
  1158.           the disassembly may not be correct (See Special Notes, Section
  1159.           4.1).  Press Ctrl-up-arrow or Ctrl-down-arrow to adjust the
  1160.           disassembly by one byte.
  1161.  
  1162.           Code can be changed from the Code Window by hitting Enter.  A
  1163.           Memory Edit Box will pop up; the first byte will be the first
  1164.           byte of the machine instruction at the cursor location.  You can
  1165.           change the code in either ASCII or hex mode; the Tab key toggles
  1166.           between the modes.
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.                                         - 15 -
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.           3.2.2 Register Window
  1196.           ---------------------
  1197.  
  1198.           The Register Window displays CS:IP, DS:SI, ES:DI, SS:SP and SS:BP
  1199.           register pairs in hex format segment and offset.  The contents of
  1200.           registers AX, BX, CX, DX are displayed in both hex and ASCII. 
  1201.           Flag values are shown in  the form Upper Case, highlighted = on
  1202.           (set, 1); lower case, not highlighted = off (cleared, 0).  The
  1203.           Register Window can be moved to any location on the screen or
  1204.           removed altogether.  The size of the Register Window can not be
  1205.           changed.
  1206.  
  1207.           Movement within the Register Window is controlled by the arrow
  1208.           keys.  Page up and page down move to the top and bottom of the
  1209.           Register Window respectively.  Contents of the Register Window
  1210.           are continuously updated as your program executes.
  1211.  
  1212.           Any register value can be changed by moving the cursor to the
  1213.           value and hitting Enter or Ctrl-arrow keys.  A Memory Edit Box
  1214.           will pop up displaying the register and value, highlighting the
  1215.           current digit position.  Standard cursor movement keys apply. 
  1216.           Type in the new hex value and hit enter.  The new value will
  1217.           appear in the Register Window and will be used for subsequent
  1218.           operations.
  1219.  
  1220.           A handy "undo" feature is available from the Menu - Code
  1221.           selection, Restore Registers.  This command will restore all
  1222.           registers to the value they had after the last executed
  1223.           statement.
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.                                         - 16 -
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.           3.2.3 Stack Window
  1262.           ------------------
  1263.  
  1264.           The Stack Window displays the address and value for the stack. 
  1265.           The display initially begins with the bottom item displaying the
  1266.           stack at location SS:SP.  The Stack Window can be moved to any
  1267.           location on the screen, or removed altogether.  The Stack Window
  1268.           may be expanded in height to show more stack contents, but its
  1269.           width is fixed.
  1270.  
  1271.           Moving within the window is controlled by the arrow keys.  Moving
  1272.           beyond the upper or lower window boundaries or using Page Up/Page
  1273.           Down causes the stack to scroll within the window.  The current
  1274.           location of SS:SP is indicated by a triangle on the right of the
  1275.           stack address (left of the stack value).  When you are stepping
  1276.           through your program the contents of the stack will be updated
  1277.           appropriately.  The display within the window will also adjust so
  1278.           that location SS:SP will continue to appear in the window as the
  1279.           stack grows or shrinks.
  1280.  
  1281.           The stack contents can be modified by hitting Enter while in the
  1282.           Stack Window.  A Memory Edit Box will pop up; the first byte will
  1283.           be the byte that the cursor is on in the Stack Window.  Several
  1284.           values may be modified at the same time (Remember the IBM PC
  1285.           stores words in reverse byte order).  You can change these values
  1286.           in either ASCII or hex mode; the TAB key toggles between the
  1287.           modes.  The blinking cursor appears on the ASCII line in ASCII
  1288.           editing mode and on the hex byte representation in hex editing
  1289.           mode.
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.                                         - 17 -
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.           3.2.4 Dump Window
  1328.           -----------------
  1329.  
  1330.           The Dump Window displays the contents of an area of memory in
  1331.           both hex and ASCII.  The initial area displayed begins at DS:0080
  1332.           when a program is successfully loaded, thus displaying the
  1333.           program's command line.  If a program is not loaded the initial
  1334.           display begins at DS:0000.  The Dump Window can be moved to any
  1335.           location on the screen or removed altogether.  The Dump Window
  1336.           may be expanded or contracted in both height and width.
  1337.  
  1338.           Moving within the window is controlled by the arrow keys.  Moving
  1339.           beyond the upper or lower boundaries or using Page-up/Page-down
  1340.           causes the memory display to scroll within the window.  When you
  1341.           are stepping through your program the contents of the Dump Window
  1342.           are updated as appropriate.
  1343.  
  1344.           Memory contents can be modified by hitting Enter while in the
  1345.           Dump Window.  A Memory Edit Box will pop up; the first byte will
  1346.           be the byte that the cursor is on in the Dump Window.  Several
  1347.           values may be modified at the same time (Remember the IBM PC
  1348.           stores words in reverse byte order).  You can change these values
  1349.           in either ASCII or hex mode; the tab key toggles between the
  1350.           modes.  The blinking cursor appears on the ASCII line in ASCII
  1351.           editing mode and on the hex byte representation in hex editing
  1352.           mode.
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.                                         - 18 -
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.           3.2.5 Variable Window
  1394.           ---------------------
  1395.  
  1396.           The Variable Window displays the contents of memory at specific
  1397.           memory locations.  Up to 44 different memory areas may be
  1398.           displayed simultaneously.  The display format can be bytes or
  1399.           words, in hex or decimal, or ASCII characters.  You can display
  1400.           one or many contiguous memory locations starting at the segment
  1401.           and offset indicated.  The segment and offset can be selected
  1402.           from a menu or by typing in an address.  The offset can also be
  1403.           selected by using a variable name (assuming you have created a
  1404.           symbol file - see Section V-Utilities).  This last feature is
  1405.           very handy because it displays the variable name as the offset
  1406.           making debugging a lot friendlier.  An additional feature is the
  1407.           Continue Previous option which continues the memory display from
  1408.           the previous line of the Variable Window.  This is very useful
  1409.           for long strings or arrays.  You can have as many continue lines
  1410.           as you like (up to the maximum of 44 display lines) and the
  1411.           display will automatically adjust itself if you change the size
  1412.           of the Variable Window.  All of the above references selections
  1413.           that are made from the Menu - Data selection, Var Edit.
  1414.  
  1415.           Several lines have preset default displays (which can be changed)
  1416.           when you enter ZD86.  The first two lines of the display are
  1417.           preset to DS:SI and ES:DI respectively.  The third and fourth
  1418.           lines are set to DS:0080 and its continuation, which is the
  1419.           program command line area.  The setting for DS:0080 is a single
  1420.           decimal byte (this location indicates the command line length)
  1421.           and the continuation line is set for multiple ASCII display to
  1422.           show the actual command line text that was typed.  The Variable
  1423.           Window can be moved to any location on the screen or removed
  1424.           altogether.  The Variable Window may be expanded or contracted in
  1425.           both height and width.  Within the Variable Window, the display
  1426.           can be shifted to allow a larger field for Offset in the case of
  1427.           longer variable names.
  1428.  
  1429.           The Type column in the Variable Window indicates the display
  1430.           format for each address or variable that you have set.  The first
  1431.           position is 1 or M indicating single or multiple memory location
  1432.           display.  In the second position A indicates ASCII display; a B
  1433.           or W indicates Byte or Word.  If B or W is specified it is
  1434.           followed by H or D for hex or decimal.
  1435.  
  1436.           Moving within the window is controlled by the arrow keys.  Moving
  1437.           beyond the upper or lower boundary of the screen or using
  1438.           Page-up/Page-down causes the display to scroll within the window. 
  1439.           Scrolling will stop when the top or bottom is reached.  Small
  1440.           arrows in the border of the window indicate if there is any more
  1441.           displayable area in the direction pointed to.  When you are
  1442.           stepping through your program the contents of the Variable Window
  1443.           are updated appropriately.
  1444.  
  1445.  
  1446.                                         - 19 -
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.           Memory contents can be modified by hitting ENTER while in the
  1460.           Variable Window.  A Memory Edit Box will pop up; the first byte
  1461.           will be the byte that the cursor is on in the Variable Window. 
  1462.           Several values may be modified at the same time (Remember the IBM
  1463.           PC stores words in reverse byte order).  You can change these
  1464.           values in either ASCII or hex mode; the TAB key toggles between
  1465.           the modes.  The blinking cursor appears on the ASCII line in
  1466.           ASCII editing mode and on the hex byte representation in hex
  1467.           editing mode.
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.                                         - 20 -
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.           3.2.6 Output Window
  1526.           -------------------
  1527.  
  1528.           The Output Window displays the standard text User Application
  1529.           Screen.  The Output Window can be moved anywhere on the screen or
  1530.           removed altogether.  The Output Window can be expanded or
  1531.           contracted up to the size of the user screen.
  1532.  
  1533.           The numbers in the center of the bottom border indicate the
  1534.           screen row and column position of the upper left corner display
  1535.           character in the Output Window.  The arrow and other cursor
  1536.           control keys can be used to move the display within the window. 
  1537.           Small arrows in the border of the window indicate if there is any
  1538.           more displayable area in the direction pointed to.  As you step
  1539.           through your program the Output Window is updated as appropriate. 
  1540.           It is especially useful in debugging to watch output appearing
  1541.           while at the same time watching register and variable changes in
  1542.           another area of the screen.
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.                                         - 21 -
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.           3.3 Configuring ZD86
  1592.           ----------------------
  1593.  
  1594.           One of the more important ZD86 features is its configurability. 
  1595.           You have control over the debugging environment and can tailor it
  1596.           in a way that best meets your needs and increases your
  1597.           productivity.  You could even have multiple layouts and have a
  1598.           macro to change between them with an Alt-number combination - try
  1599.           pressing Alt-7 (Alt-9 will restore the display).
  1600.  
  1601.           Before you begin experimenting with configuration options, make
  1602.           sure that you have made a backup copy of ZD86 so that you can
  1603.           restore the original settings later if you don't like the
  1604.           settings you have chosen.
  1605.  
  1606.           In general you have the capability to configure Windows, Colors,
  1607.           Function Key assignments, 25 vs. 43/50 line display mode, and
  1608.           miscellaneous items such as shadow and background characters. 
  1609.           You may also save all the Variable Window settings.  The next
  1610.           time you activate ZD86 you would then have your own unique ZD86
  1611.           Debugging Environment ready for use.
  1612.  
  1613.           You have complete control over the size and placement on the
  1614.           screen of the six debugging windows.  While in Command Mode press
  1615.           R to resize the current window, move it around the screen with
  1616.           the arrow keys, and change its size by pressing the Ctrl-arrow
  1617.           keys.  You can also close or open the windows as you see fit. 
  1618.           Experiment until you find an arrangement that best suits your
  1619.           needs, then save it using the Menu - Install selection, Save
  1620.           Windows.  You can always change the display arrangement easily as
  1621.           the need arises.
  1622.  
  1623.           Colors should be chosen to highlight the items you consider most
  1624.           important.  Each window has separate colors for foreground,
  1625.           background, cursor, etc.  Follow the list under Menu - Install
  1626.           selection.  A color box will appear in the upper left of the
  1627.           screen with a white outline around the current foreground and
  1628.           background selection for the item you are editing.  Move the
  1629.           outline around with the arrow keys until you find a suitable
  1630.           color combination.  Enter will change to the new color, Esc
  1631.           leaves the old color in effect.  Because of all the different
  1632.           items for which colors can be chosen you will need to experiment
  1633.           a bit to find pleasing and sufficiently contrasting color
  1634.           combinations.  Save your choices at any time using the Menu -
  1635.           Install selection, Save Colors.
  1636.  
  1637.           Each of the Function Keys can be assigned a different command
  1638.           value.  F1 has been preset to Help, but can be reconfigured.  The
  1639.           combinations Shift Function Key, Alt Function Key, and Ctrl
  1640.           Function Key are also configurable.  To configure the function
  1641.           keys choose Configure Function keys from the list under Menu -
  1642.           Install selection and choose the key assignments by moving
  1643.  
  1644.                                         - 22 -
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.           through the convenient menu provided in the upper left of the
  1658.           screen. Enter will assign the command selected, Esc will cancel
  1659.           the assignment of the command and restore the Function Key to its
  1660.           previous command assignment.  Save your choices at any time using
  1661.           the Menu option, Install, Save Function Keys.
  1662.  
  1663.           Variable Window settings are established under the Menu - Data
  1664.           selection, Variable Edit, or by pressing E from command mode.  As
  1665.           indicated in the subsequent menu you can specify the Segment and
  1666.           Offset for display at the current cursor position in the Variable
  1667.           Window (Make sure you have the cursor set on a line in the
  1668.           Variable Window that you have not already set up or that you want
  1669.           to change).  Under the Offset selection you may type a symbol
  1670.           name instead of an address or register and it will be used in the
  1671.           Variable Window.  For each address/variable selected you can
  1672.           choose whether you wish to display ASCII, Hex or Decimal bytes or
  1673.           Words and whether or not you want one or many of your choice
  1674.           displayed.  If you choose many, the display will begin at the
  1675.           location specified and continue for the width of the Variable
  1676.           Window.
  1677.  
  1678.           A special feature is the Continue Previous option.  This displays
  1679.           memory beginning at the next location following the last location
  1680.           in the previous line.  You can thus cause a long variable to wrap
  1681.           within the window so that you can see the entire variable
  1682.           contents even if it is larger than the width of the window.  You
  1683.           may continue for as many lines as you like and the continuation
  1684.           lines automatically readjust if you resize the Variable Window.
  1685.  
  1686.           To save the configuration settings of the Variable Window  choose
  1687.           the Menu - File selection, Save Var Window.  You may save
  1688.           multiple Variable Window configuration files (just change the
  1689.           filename, but the extension must be .ZDV.  The default is Program
  1690.           Name.ZDV).  Use Menu - File selection, Load Var Window to
  1691.           retrieve Variable Window configuration settings (The default
  1692.           Program Name.ZDV is automatically loaded for you, if it exists,
  1693.           upon loading a program).
  1694.  
  1695.           Miscellaneous items that you can configure include shadow and
  1696.           background variations and case for symbol displays.  Follow the
  1697.           list Menu - Install selection, Other Configure.  You can save
  1698.           your choices using Save Other Settings.  This option also saves
  1699.           the current setting of Screen Swap (smart, always, or never).
  1700.  
  1701.           If you have created any Macros you can save them using the Menu -
  1702.           Install selection, Save Macros.  You can save all settings for
  1703.           Windows, Colors, Function Keys, Miscellaneous Items, and Macros
  1704.           at one time with the Menu - Install selection, Save Everything. 
  1705.           Note that you must save Variable Window configuration settings
  1706.           from the Menu - File selection, Save Variable Window.
  1707.  
  1708.  
  1709.  
  1710.                                         - 23 -
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.           3.4 Advanced Operation
  1724.           ----------------------
  1725.  
  1726.           3.4.1 Macros
  1727.           ------------
  1728.  
  1729.           Macros give you the capability to automate a sequence of
  1730.           keystrokes that you use frequently.  You can define up to 10
  1731.           Macros and each can contain up to 100 keystrokes.  Macros can be
  1732.           chained together, i.e., Macro 3 in its last keystroke can invoke
  1733.           Macro 4.  Thus you can actually automate a sequence of more than
  1734.           100 keystrokes.
  1735.  
  1736.           Recording a Macro is straightforward.  Simply hit Alt-M which
  1737.           invokes Macro recording, select a number for the macro, and then
  1738.           press the sequence of keys that you wish to record.  While you
  1739.           are recording your macro, the upper right corner of the screen
  1740.           indicates that you are recording and the number you selected for
  1741.           this Macro (R#).  Just to the left of this you will see the Key #
  1742.           in the Macro for the next keystroke to be recorded.  When you are
  1743.           finished press Alt-M again to turn Macro recording off.
  1744.  
  1745.           To execute the Macro press Alt and the number you selected for
  1746.           the macro.  When you invoke a Macro (Alt-number) you will see the
  1747.           Key # and Macro number displayed in the upper right of the screen
  1748.           (very briefly because Macros execute very quickly).  While ZD86
  1749.           is executing a Macro, hitting Alt-S will abort the Macro play
  1750.           back.  At this point the Macro is only temporary for this run of
  1751.           ZD86.  To make it permanent so that you can use the Macro again
  1752.           the next time you run ZD86, choose Menu - Install selection, Save
  1753.           Macros or Save Everything.
  1754.  
  1755.           To chain Macros include the keystroke Alt-Number(of the Macro you
  1756.           wish to chain) at the end of the Macro you are defining.  You
  1757.           will receive a message indicating that the Macros are chained. 
  1758.           Make sure you do this on or before Key #100.  If you key in 100
  1759.           keystrokes you will receive the message "Maximum macro length
  1760.           reached - recording ended".  Your first 100 keystrokes were
  1761.           recorded, however.  Hit Esc to clear the error box.
  1762.  
  1763.           To replace a Macro simply record a new Macro with the same
  1764.           number.  To guard against accidental erasure, when you invoke
  1765.           Macro recording Macros in use are indicated by a check mark.
  1766.  
  1767.           To see what keystrokes have been recorded a special utility,
  1768.           Zmacros, is provided to registered users to display the contents
  1769.           of all Macros.  Simply type Zmacros ZD86 from DOS to produce a
  1770.           listing which you can look at on the screen, or redirect to the
  1771.           printer or a file.
  1772.  
  1773.  
  1774.  
  1775.  
  1776.                                         - 24 -
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.           3.4.2 Graphics Debugging
  1790.           ------------------------
  1791.  
  1792.           Special restrictions apply when using ZD86 for graphics programs. 
  1793.           Debugging programs using any video mode works, but the User
  1794.           Application Screen is lost whenever control is returned to ZD86.
  1795.           However, ZD86 supports display saving during debugging of VGA 13h
  1796.           mode (320x200x256).  To use this feature invoke ZD86 with the
  1797.           command line option /VGA13h.  It will require an additional 64K
  1798.           of memory.
  1799.  
  1800.           The Graphics Video Memory area will not appear correctly in the
  1801.           Dump or Variable Windows because the Debug screen is in text mode
  1802.           and the video memory area becomes read-only except when graphics
  1803.           mode is active.  The Screen Swap option must be set to Always or
  1804.           results may be incorrect for the same reason (no warning is given
  1805.           by the system on a write failure to video memory).  The User
  1806.           Application Screen will display the graphics properly, however,
  1807.           the Output Window of the ZD86 Debugging Environment will not
  1808.           display graphics.
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.                                         - 25 -
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.           4.0 Special Notes
  1856.           -----------------
  1857.  
  1858.           Several areas of debugging and ZD86 features require special
  1859.           clarification and are discussed below.
  1860.  
  1861.           4.1 Disassembly, Moving Backwards
  1862.           ---------------------------------
  1863.  
  1864.           Any disassembler can have difficulty moving backwards through
  1865.           memory because the interpretation of memory bytes into
  1866.           disassembled code is ambiguous unless you have a fixed starting
  1867.           point.  This difficulty occurs because addresses and data in the
  1868.           code area often coincidentally have a valid assembly language
  1869.           interpretation.  This is not a problem moving forward from a
  1870.           known starting point in the code area because the Assembler
  1871.           syntax rules limit the operand lengths and locations and
  1872.           therefore a unique, correct disassembly can be guaranteed.  If
  1873.           you encounter a problem while moving backwards in the code window
  1874.           press Ctrl-up-arrow or Ctrl-down-arrow which will shift the
  1875.           disassembly by one byte each time until the valid code is
  1876.           displayed.
  1877.  
  1878.           4.2 Procedure Step Runaway
  1879.           --------------------------
  1880.  
  1881.           Procedure stepping is designed to stop at the next statement
  1882.           following a REP, LOOP or procedure CALL.  If within the procedure
  1883.           the code causes a jump to some other location such that the next
  1884.           statement following the CALL is not encountered, the program will
  1885.           continue to execute until the next breakpoint or the end of the
  1886.           program, whichever is encountered first.
  1887.  
  1888.           4.3 Status Line Help
  1889.           --------------------
  1890.  
  1891.           The status line displays many, but not all, of the most important
  1892.           keys and their function depending on where you are in the ZD86
  1893.           Debugging Environment.  There may be other options available.
  1894.  
  1895.           4.4 Symbolic Label Offsets
  1896.           --------------------------
  1897.  
  1898.           When using Symbolic Labels only the Offset is stored.  If you are
  1899.           working on a very large program, such as the assembly version of
  1900.           a higher level language source, your code may span more than one
  1901.           segment.  If this occurs you may encounter spurious labels in the
  1902.           Code Window wherein a Label from one segment will appear at the
  1903.           same offset location in another segment.
  1904.  
  1905.           4.5 Symbols non-Case Sensitive
  1906.           ------------------------------
  1907.  
  1908.                                         - 26 -
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.           Symbol name entering is not case sensitive in ZD86 so that if the
  1922.           only difference between two labels is case ZD86 considers them
  1923.           interchangeable.  It is best to use symbols in your source code
  1924.           that differ by something other than case.
  1925.  
  1926.           4.6 Command Line Redirection
  1927.           ----------------------------
  1928.  
  1929.           If you wish to use DOS redirection for the program you are
  1930.           debugging, you must type the redirection to your program on the
  1931.           command line when invoking ZD86.  Redirection will not work when
  1932.           invoked from within the ZD86 Debugging Environment using the Load
  1933.           Program option from the Menu - File selection.  Exit ZD86 and
  1934.           invoke it with 
  1935.           ZD86 (program name) (redirection symbol, filename)
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.                                         - 27 -
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.  
  1987.           5.0 Utilities
  1988.           -------------
  1989.  
  1990.           Six utilities come with ZD86 to support and enhance the quality
  1991.           of the debugger.  Three of them convert files produced by your
  1992.           assembler or linker into .Z86 files which provide symbolic
  1993.           debugging information to ZD86.  The other three utilities provide
  1994.           other helpful functions: listing all the symbols stored in a .Z86
  1995.           file, showing all the macros stored in your copy of ZD86, and
  1996.           copying configuration information from one copy of ZD86 to
  1997.           another copy of ZD86.
  1998.  
  1999.           Only two of the utilities come with the unregistered copy of
  2000.           ZD86:  Lst-Z86 and Sym-Z86.  The other utilities remain incentive
  2001.           for you to register ZD86--see Section 1.2.
  2002.  
  2003.           5.1 Lst-Z86
  2004.           -----------
  2005.  
  2006.           The purpose of Lst-Z86 is to take a .Lst file output from TASM or
  2007.           MASM and write a .Z86 file containing all the symbols in your
  2008.           program.  Like all of the utilities, Lst-Z86 is command line
  2009.           driven.  The format for running Lst-Z86 is
  2010.  
  2011.                       Lst-Z86 d:\path\filespec[.lst]
  2012.  
  2013.           The filespec can contain wildcards, and the .Lst is optional on
  2014.           the end.
  2015.  
  2016.           5.2 Sym-Z86
  2017.           -----------
  2018.  
  2019.           Sym-Z86 is specialized for use with A86 .Sym files.  A86 outputs
  2020.           .Sym files whenever it assembles any code, unless you specify -S
  2021.           on the A86 command line.  Sym-Z86 will take the .Sym file and
  2022.           convert it to a .Z86 file for symbolic debugging in ZD86.  ZD86
  2023.           is one of only two debuggers in existence that allow you to
  2024.           symbolically debug programs written in A86 from the .Sym file. 
  2025.           The format for running Sym-Z86 is
  2026.  
  2027.                      Sym-Z86 d:\path\filespec[.sym]
  2028.  
  2029.           Again, the filespec can contain wildcards, and the .Lst is
  2030.           optional on the end.
  2031.  
  2032.           5.3 Map-Z86
  2033.           -----------
  2034.  
  2035.           When writing programs in a high level language or a multiple
  2036.           module program in assembly language, a .Map file is often created
  2037.           by the linker.  Map-Z86 takes the public symbols from the .Map
  2038.           file and writes a .Z86 which ZD86 can use.  The format for
  2039.  
  2040.                                         - 28 -
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.           running Map-Z86 is
  2054.  
  2055.                      Map-Z86 d:\path\filespec[.map]
  2056.  
  2057.           5.4 ListZ86
  2058.           -----------
  2059.  
  2060.           After creating a .Z86 file with Lst-Z86, Sym-Z86, or Map-Z86 you
  2061.           may want to see what symbols were taken and stored in the .Z86
  2062.           file.  What ListZ86 does is list out all of your symbols and
  2063.           their values, first sorted by symbol value, and then sorted by
  2064.           name.  The format for running ListZ86 is
  2065.  
  2066.                      ListZ86 d:\path\filespec[.Z86]
  2067.  
  2068.           5.5 Zmacros
  2069.           -----------
  2070.  
  2071.           Recording long macros can be a difficult job, and remembering
  2072.           what they do even harder.  Zmacros helps be listing out all the
  2073.           saved macros in a copy of ZD86, one key at a time.  It tells you
  2074.           the scan code and ASCII code of each key, and the key's name if
  2075.           it is a non-alphanumeric key.  The format for running Zmacros is
  2076.  
  2077.                      Zmacros d:\path\ZD86[.com]
  2078.  
  2079.           5.6 ZD86upgr
  2080.           ------------
  2081.  
  2082.           Configuring all your colors, settings, macros, and function keys
  2083.           in ZD86 can take a decent amount of time, considering how much
  2084.           can be configured.  And once you have done it on your
  2085.           unregistered copy of ZD86, you definitely do not want to do it
  2086.           again.  That is exactly what ZD86upgr does for you:  it takes all
  2087.           the configuration information from one copy of ZD86, and saves it
  2088.           all into another (possibly registered copy) of ZD86.  The format
  2089.           for running ZD86upgr is
  2090.  
  2091.                      ZD86upgr d:\path\zd86[.com] d:\path\zd86[.com]
  2092.  
  2093.           The first file will be updated with the configuration in the
  2094.           second.
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.                                         - 29 -
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.           6.0 Registration Form
  2120.           ---------------------
  2121.  
  2122.           Name           __________________________________________________ 
  2123.  
  2124.           Street Address __________________________________________________ 
  2125.  
  2126.           City           ______________________ State _____ Zip ___________ 
  2127.  
  2128.           Where did you get ZD86? _________________________________________ 
  2129.  
  2130.  
  2131.                                    ZanySoft Debugger, version 1.0
  2132.  
  2133.           ______ I am sending you $25 registration cost.  I use ZD86 on one
  2134.                  machine and would like you to send me a disk with the
  2135.                  registered version of ZD86.                        
  2136.  
  2137.                   Disk size: _____ 3.5"       _____ 5.25"
  2138.  
  2139.              If sending a check, make it out to Christopher Kirmse.  For
  2140.              orders of more than one copy, send me a letter and we will
  2141.              work out a suitable price.
  2142.  
  2143.              Please send this form and payment to:
  2144.  
  2145.                                    ZanySoft
  2146.                                    9303 Arabian Ave.
  2147.                                    Vienna, VA  22182
  2148.  
  2149.           Write any comments below:
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.                                         - 30 -
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.